//package com.huarui.user.webwork.interceptor;
//
//import java.util.Enumeration;
//import java.util.HashMap;
//import java.util.Map;
//
//import javax.servlet.http.HttpServletRequest;
//
//import org.apache.struts2.ServletActionContext;
//
//import com.huarui.user.action.ITokenAware;
//import com.huarui.user.model.Token;
//import com.huarui.user.service.AccessControlService;
//import com.huarui.user.service.TokenService;
//import com.opensymphony.xwork2.ActionContext;
//import com.opensymphony.xwork2.ActionInvocation;
//import com.opensymphony.xwork2.ActionProxy;
//import com.opensymphony.xwork2.interceptor.Interceptor;
//
///**
// * 权限验证，如果用户没有权限则重定向到登录界面
// */
//public class AuthenticationInterceptor implements Interceptor {
//
//	private static final long serialVersionUID = -5805257255941576344L;
//	
//	private TokenService tokenService;
//	
//	public void setTokenService(TokenService tokenService) {
//		this.tokenService = tokenService;
//	}
//	
//	private String loginResult = "login";
//	
//	/**
//	 * 登录页面
//	 */
//	public void setLoginResult(String loginResult) {
//		this.loginResult = loginResult;
//	}
//	
//	public void init() {
//
//	}
//	
//	public void destroy() {
//
//	}
//	
//	private AccessControlService accessControlService;
//	
//	public void setAccessControlService(AccessControlService accessControlService) {
//		this.accessControlService = accessControlService;
//	}
//
//	public String intercept(ActionInvocation invocation) throws Exception {
//		ActionContext ctx = invocation.getInvocationContext();
//		HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
//		
//		// 从Cookie中读取当前用户的会话信息
//		Token token = tokenService.parseToken(request);
//
//		// Action需要注入Token吗?
//		Object action = invocation.getAction();
//		if (action instanceof ITokenAware) {
//			((ITokenAware) action).setToken(token);
//		}
//		
//		// 检查功能权限
//		ActionProxy proxy = invocation.getProxy();
//		String url = proxy.getNamespace() + '/' + proxy.getActionName() + '!' + proxy.getMethod();
//		
//		Map<String, String> params = new HashMap<String, String>();
//		for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements(); ) {
//			String name = e.nextElement();
//			params.put(name, request.getParameter(name));
//		}
//		
//		boolean hasPermission = accessControlService.hasPermission(token, url, params);
//		if (!hasPermission) {
//			return loginResult;
//		}
//		
//    	return invocation.invoke();
//	}
//
//}
